package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func wr() {
	file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_WRONLY, 0666) 
	if err != nil {
		return
	}
	defer file.Close()
	writer := bufio.NewWriter(file)
	for i := 0; i < 10; i++ {
		writer.WriteString("hello\n")
	}
	writer.Flush()
}

func re() {
	file, err := os.Open("./test.txt")
	if err != nil {
        return
    }
	defer file.Close()
	reader := bufio.NewReader(file)
	for {
		line, _, err := reader.ReadLine()
		if err == io.EOF {
			break
		}
		if err != nil {
			return 
		}
		fmt.Println(string(line))
	}
}

func main() {
	// 1.以文件的方式操作终端
	// var buf [16]byte
	// os.Stdin.Read(buf[:])
	// os.Stdin.WriteString(string(buf[:]))

	// 2.打开和关闭文件
    // file, err := os.Open("./main.go")
    // if err != nil {
    //     fmt.Println("open file failed!, err:", err)
    //     return
    // }
    // file.Close()
	
	// 3.写文件
	// file, err := os.Create("./test.txt")
	// if err != nil {
    //     fmt.Println(err)
    //     return
    // }
	// defer file.Close()
	// for i := 0; i < 5; i++ {
	// 	file.WriteString("ab\n")
	// 	file.Write([]byte("cd\n"))
	// }

	// 4.读文件
	// file, err := os.Open("./test.txt")
	// if err != nil {
	// 	fmt.Println("open file err :", err) 
	// 	return 
	// }
	// defer file.Close()
	// // 定义接收文件读取的字节数组
	// var buf [128]byte
	// var content []byte
	// for {
	// 	n, err := file.Read(buf[:])
	// 	if err == io.EOF {
	// 		// 读取结束
	// 		break
	// 	}
	// 	if err != nil {
    //         fmt.Println("read file err ", err)
    //         return
    //     }
	// 	content = append(content, buf[:n]...)
	// }
	// fmt.Println(string(content))

	// 5.bufio带缓冲区的读写
	re()
	// wr()
}